package com.qmq.common.utils;

import com.qmq.common.exception.RRException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.system.ApplicationHome;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.Objects;
import java.util.UUID;

@Slf4j
@Component
public class PhotoUtils {

    @Value("${file.upload}")
    private String path;

    public String saveFile(MultipartFile file) {
        if (file.isEmpty()) {
            throw new RRException("文件为空!");
        }
        String prefix = Objects.requireNonNull(file.getContentType())
                .substring(file.getContentType().lastIndexOf("/") + 1);
        if (!Constant.IMAGE_PREFIX.contains(prefix)) {
            throw new RRException("不支持的文件格式!");
        }
        // 给文件重命名
        String fileName = UUID.randomUUID() + Constant.DOT.concat(prefix);
        try {
            // 获取保存路径
            String path = getSavePath();
            File files = new File(path, fileName);
            log.info("path===>{}",path);
            File parentFile = files.getParentFile();
            if (!parentFile.exists()) {
                parentFile.mkdir();
            }
            file.transferTo(files);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fileName;
    }

    public String getSavePath() {
        // 这里需要注意的是ApplicationHome是属于SpringBoot的类
        // 获取项目下resources/static/img路径
        ApplicationHome applicationHome = new ApplicationHome(this.getClass());

        // 保存目录位置根据项目需求可随意更改
        String absolutePath = applicationHome.getDir().getParentFile()
                .getParentFile().getAbsolutePath();
        log.info("图片保存路径,absolutePath===>{}",absolutePath);
//        return absolutePath + "\\src\\main\\resources\\images";
        return path;
    }

    public String getShowPath() {
        // 这里需要注意的是ApplicationHome是属于SpringBoot的类
        // 获取项目下resources/static/img路径
        ApplicationHome applicationHome = new ApplicationHome(this.getClass());

        // 保存目录位置根据项目需求可随意更改
        return applicationHome.getDir().getParentFile()
                .getParentFile().getAbsolutePath() + "\\src\\main\\resources";
    }

    public boolean delete(String filePath){
        boolean flag = false;
        String[] images = filePath.split("images");
        //根据路径创建文件对象
        File file = new File(getSavePath().concat(images[1]));
        //路径是个文件且不为空时删除文件
        if(file.isFile() && file.exists()){
            flag = file.delete();
        }
        //删除失败时，返回false
        return flag;
    }
}
